/*ESP-Now 发送广播数据*/


#include <WiFi.h>
#include <esp_now.h>

// 定义要发送的数据结构体
typedef struct struct_message {
    char a[32];
    int b;
    float c;
} struct_message;

// 创建结构体实例
struct_message myData;

// 发送回调函数（可选）
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
    Serial.print("\r\nLast Packet Send Status:\t");
    Serial.println(status == ESP_NOW_SEND_SUCCESS? "Delivery Success" : "Delivery Fail");
}
   // 配置广播地址
  uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
void setup() {
    Serial.begin(115200);
  
    // 初始化 WiFi 为 Station 模式
    WiFi.mode(WIFI_STA);
  
    // 初始化 ESP-NOW
    if (esp_now_init()!= ESP_OK) {
        Serial.println("Error initializing ESP-NOW");
        return;
    }
  
    // 注册发送回调函数（可选）
    esp_now_register_send_cb(OnDataSent);
  
 
    esp_now_peer_info_t peerInfo;
    memset(&peerInfo, 0, sizeof(peerInfo));
    memcpy(&peerInfo.peer_addr, broadcastAddress, 6);
    peerInfo.channel = 0;  // 可以根据需要设置通道
    peerInfo.encrypt = false;
  
    // 添加对等设备
    if (esp_now_add_peer(&peerInfo)!= ESP_OK) {
        Serial.println("Failed to add peer");
        return;
    }
  
    // 准备要发送的数据
    strcpy(myData.a, "Hello ESP-NOW");
    myData.b = 123;
    myData.c = 4.56;
}

void loop() {
    // 发送数据
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
    if (result == ESP_OK) {
        Serial.println("Sent with success");
    } else {
        Serial.println("Error sending the data");
    }
    delay(1000);  // 每秒发送一次数据，可以根据需要调整发送频率
}